package br.com.divulgaqui.service;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.jboss.logging.Logger;

import br.com.divulgaqui.client.ModeloServiceBeanLocal;
import br.com.divulgaqui.client.ModeloServiceBeanRemote;
import br.com.divulgaqui.client.exception.EntityIgualException;
import br.com.divulgaqui.entity.Modelo;
import br.com.divulgaqui.persistence.dao.ModeloDAO;
import br.com.divulgaqui.persistence.daoimpl.ModeloDAOImpl;
@Stateless
public class ModeloServiceBean implements ModeloServiceBeanLocal,ModeloServiceBeanRemote {

	@PersistenceContext
	private EntityManager entityManager;
	private ModeloDAO modeloDAO;
	private Logger logg = Logger.getLogger(ModeloServiceBean.class);
	
	public ModeloServiceBean() {		
	}
	
	@PostConstruct
    public void init(){    	
    	this.modeloDAO = new ModeloDAOImpl(this.entityManager);
    }

	@Override
	public void salvar(Modelo modelo) throws EntityIgualException {
		Long id = modelo.getId() == null ? 0 : modelo.getId();
		Modelo mod = this.modeloDAO.pesquisarModeloPorNome(id, modelo.getNome());		
		if(mod == null){
			this.modeloDAO.salvar(modelo);
		}else{
			logg.warn("Modelo \""+modelo.getNome()+"\" já foi cadastrada");
			throw new EntityIgualException();
		}
	}

	@Override
	public void atualizar(Modelo modelo) throws EntityIgualException {		
		Long id = modelo.getId() == null ? 0 : modelo.getId();
		Modelo mod = this.modeloDAO.pesquisarModeloPorNome(id, modelo.getNome());		
		if(mod == null){
			this.modeloDAO.atualizar(modelo);
		}else{
			logg.warn("Modelo \""+modelo.getNome()+"\" já foi cadastrada");
			throw new EntityIgualException();
		}
	}

	@Override
	public List<Modelo> listarModelos() {		
		return this.modeloDAO.listar();
	}

	@Override
	public List<Modelo> listarModelosComMarcaECategoria() {		
		return this.modeloDAO.listarModelosComMarcaECategoria();
	}

	@Override
	public Modelo recuperarModeloEEspecificacoes(Long idModelo) {		
		return this.modeloDAO.recuperarModeloEEspecificacoes(idModelo);
	}
}
